# asterisk-zaptrunks.pm
# Copyright (C) 2006  Stephane Alnet
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
# 

# asterisk_proxytrunks():
#   generate asterisk extensions.conf configurations for
#   third-party gateways trunks.

# This file is part of the CarrierClass.net project.
# For more information: http://carrierclass.net/
#
package CCNv2::Provision::Asterisk::proxytrunks;
use strict;
use warnings;
use base qw(CCNCore::Provision::Base);
use CCN::Text;
use CCNCore::Scripting;

sub run()
{
    my $self = shift;
    return unless defined $self->p->{cp_member};

    my $routeconf = '';

    $self->sql_do_for( <<'SQL', $self->p->{cp_member},
        SELECT pk, px_cluster, gw_ip FROM gw_trunks WHERE cp_cluster = ?;
SQL
    sub
    {
        my ($TRUNK,$PROXY,$ip) = @_;
        
        # Inbound routing.
        $routeconf .= $self->ast_route_trunk_inbound(${TRUNK});

        # Outbound routing.
        $routeconf .= $self->ast_route_trunk_outbound(${TRUNK});
        
        # Level3
        my $level3 = 0;
        if( $ip =~ /^209\.24[4567]\./)
        {
            $level3 = 1;
        }
        
        # Override for now and assume the endpoints all have +.
        $level3 = 0;
        
        $routeconf .= 
            "[dial-trunk-$TRUNK]\n".
            "exten => _X.,1,Set(DIAL_TIMEOUT=150)\n".
            "exten => _X.,2,".($level3 ? q(Set(CALLERID(num)=+${CALLERID(num)})) : q(Noop))."\n".
            "exten => _X.,3,Macro(dispatch,TGw${TRUNK}m\${EXTEN},${PROXY})\n";
    });

    foreach('/etc/asterisk/config/extensions.proxytrunks.conf')
    {
        CAT $_, $routeconf;
        IF_CHANGED $_ => CCNv2::Scripting::AST('extensions reload');
    }
}
1;